package logica.fachadas;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;

import logica.clases.Jugador;
import logica.clases.Partida;
import logica.colecciones.Fronteras;
import logica.colecciones.Observadores;
import logica.colecciones.Partidas;
import logica.datatypes.Jugador.DataJugador_R11;
import logica.datatypes.Jugador.DataJugador_R5;
import logica.datatypes.Partida.DataPartida_R1;
import logica.datatypes.Partida.DataPartida_R4;
import logica.excepciones.JugadoresException;
import logica.excepciones.PaisesException;
import logica.excepciones.PartidaException;
import logica.monitor.Monitor;
import java.io.Serializable;

import persistencia.PersistenciaException;

public class Fabrica extends UnicastRemoteObject implements IFabrica{
	private IFachadaModerador fachadaModerador;
	private IFachadaJugadores fachadaJugadores;
	private IFachadaPublico fachadaPublico;
	
	private final static long serialVersionUID = 1;

	public Fabrica()throws RemoteException, PersistenciaException{
		
		fachadaModerador = new FachadaModerador();
		fachadaJugadores = new FachadaJugadores();
		fachadaPublico = new FachadaPublico();
	}
	
	public IFachadaModerador getFachadaModerador()throws RemoteException, PersistenciaException{
		return fachadaModerador;
		
	}
	public IFachadaJugadores getFachadaJugador()throws RemoteException{
		return fachadaJugadores;
	}
	public IFachadaPublico getFachadaPublico()throws RemoteException{
		return fachadaPublico;
	}

	
	
//	public void notificar(int codigoUpdate) throws RemoteException{
//		fachadaModerador.notificar(codigoUpdate);
//	}
	
	public void agregarObservador(IObserver cliente) throws RemoteException{
		fachadaModerador.agregarObservador(cliente);
	}
	
	
	//Solo para pruebas
	public Observadores getObservadores()throws RemoteException{
		return fachadaModerador.getObservadores();
	}
	public void setObservadores(Observadores observadores)throws RemoteException{
		fachadaModerador.setObservadores(observadores);
	}
	public int cantObs() throws RemoteException{
		return fachadaModerador.cantObs();
	}
	
	
}
